// Generated by CoffeeScript 1.4.0

/*
countdown is a simple jquery plugin for countdowns

Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
and GPL-3.0 (http://opensource.org/licenses/GPL-3.0) licenses.

@source: http://github.com/rendro/countdown/
@autor: Robert Fleischmann
@version: 1.0.1
*/


(function() {

    (function($) {
        $.countdown = function(el, options) {
            var getDateData,
                _this = this;
            this.el = el;
            this.$el = $(el);
            this.$el.data("countdown", this);
            this.init = function() {
                _this.options = $.extend({}, $.countdown.defaultOptions, options);
                if (_this.options.refresh) {
                    _this.interval = setInterval(function() {
                        return _this.render();
                    }, _this.options.refresh);
                }
                _this.render();
                return _this;
            };
            getDateData = function(endDate) {
                var dateData, diff;
                endDate = Date.parse($.isPlainObject(_this.options.date) ? _this.options.date : new Date(_this.options.date));
                diff = (endDate - Date.parse(new Date)) / 1000;
                if (diff <= 0) {
                    diff = 0;
                    if (_this.interval) {
                        _this.stop();
                    }
                    _this.options.onEnd.apply(_this);
                }
                dateData = {
                    years: 0,
                    days: 0,
                    hours: 0,
                    min: 0,
                    sec: 0,
                    millisec: 0
                };
                if (diff >= (365.25 * 86400)) {
                    dateData.years = Math.floor(diff / (365.25 * 86400));
                    diff -= dateData.years * 365.25 * 86400;
                }
                if (diff >= 86400) {
                    dateData.days = Math.floor(diff / 86400);
                    diff -= dateData.days * 86400;
                }
                if (diff >= 3600) {
                    dateData.hours = Math.floor(diff / 3600);
                    diff -= dateData.hours * 3600;
                }
                if (diff >= 60) {
                    dateData.min = Math.floor(diff / 60);
                    diff -= dateData.min * 60;
                }
                dateData.sec = diff;
                return dateData;
            };
            this.leadingZeros = function(num, length) {
                if (length == null) {
                    length = 2;
                }
                num = String(num);
                while (num.length < length) {
                    num = "0" + num;
                }
                return num;
            };
            this.update = function(newDate) {
                _this.options.date = newDate;
                return _this;
            };
            this.render = function() {
                _this.options.render.apply(_this, [getDateData(_this.options.date)]);
                return _this;
            };
            this.stop = function() {
                if (_this.interval) {
                    clearInterval(_this.interval);
                }
                _this.interval = null;
                return _this;
            };
            this.start = function(refresh) {
                if (refresh == null) {
                    refresh = _this.options.refresh || $.countdown.defaultOptions.refresh;
                }
                if (_this.interval) {
                    clearInterval(_this.interval);
                }
                _this.render();
                _this.options.refresh = refresh;
                _this.interval = setInterval(function() {
                    return _this.render();
                }, _this.options.refresh);
                return _this;
            };
            return this.init();
        };
        $.countdown.defaultOptions = {
            date: "June 7, 2087 15:03:25",
            refresh: 1000,
            onEnd: $.noop,
            render: function(date) {
                return $(this.el).html("" + date.years + " years, " + date.days + " days, " + (this.leadingZeros(date.hours)) + " hours, " + (this.leadingZeros(date.min)) + " min and " + (this.leadingZeros(date.sec)) + " sec");
            }
        };
        $.fn.countdown = function(options) {
            return $.each(this, function(i, el) {
                var $el;
                $el = $(el);
                if (!$el.data('countdown')) {
                    return $el.data('countdown', new $.countdown(el, options));
                }
            });
        };
        return void 0;
    })(jQuery);

}).call(this);
